PowerShell Core 6.2がリリースされました
しばたです。
本日PowerShell Core 6.2がGAとなりPowerShell Teamからのアナウンスが発表されました。
本記事ではその内容をかつまんでお伝えします。
PowerShell Core 6.2のインストール
PowerShell Coreのインストールおよびアップデートは公式のドキュメントを参照してください。
- Get PowerShell
- Windows への PowerShell Core のインストール
- Linux への PowerShell Core のインストール
- macOS への PowerShell Core のインストール
基本的にはWindowsであればMSIインストーラー、macOSであればDMPファイルかHomebrew Cask、Linuxであれば各ディストリビューションで使われているパッケージマネージャーからインストールおよび、アップデートが可能です。
ちなみにWidows、macOSでのアップデートであればPSCoreUpdateというツールを自作していますのでよろしければこちらも使ってみてください(宣伝)。
PowerShell Core 6.2の新機能
PowerShell Core 6.2は"パフォーマンス改善"、"バグ修正"、"言語機能やコマンドレットの軽微な改善"を主として行ったため目立った新機能はあまりありません。
それでもPowerShell TeamによるとPowerShell Core 6.1から560を超える変更を加えてきたそうです。
変更の一覧はGitHubのリリースノートに記載されています。
Experimental Features
大きな新機能としては試験的な機能(Experimental Feature)が導入されました。
試験的な機能がどういったものかについては以前にDevelopers.IOで触れているので詳細はこちらをご覧ください。
以前に紹介した際に利用可能な機能はBatch implicit remoting proxy commands to improve performance
一つだけでしたが、PowerShell Core 6.2 GA時点では他に3つの機能が増え、
- Batch implicit remoting proxy commands to improve performance
- Command Not Found Suggestions
- Temp Drive
- Abbreviation Expansion
の4機能存在します。
以下各機能を簡単に説明します。
Batch implicit remoting proxy commands to improve performance
こちらはPowerShell CoreのExperimental Featureを試してみたでも説明した通り、Implict Remotingにおけるコマンド実行で都度ローカル⇔リモート間の通信が発生してしまうのを改善し、リモート側で複数のコマンドが連続で実行される場合はまとめて実行することでパフォーマンスを改善するものです。
公式アナウンスによるとImplicit Remotingで単純にGet-Process | Sort-Object
を実行し10~15秒かかってしまっていたケースが20~30ミリ秒に改善されたと記されています。
(私見ですが、Implicit Remotingのボトルネックは都度発生するネットワーク通信とオブジェクトのシリアライズ・デシリアライズなのでこれくらいの改善は十分にありえると思われます。)
Command Not Found Suggestions
こちらはちょっと地味な改善ですが、入力間違いなどでコマンドが見つからなかった際に類似のコマンドをサジェストしてくれる機能になります。
公式アナウンスの例を引用すると、Get-Command
を打とうとしてGet-Commnd
としてしまった場合だと下図の様なサジェストが表示されます。
# Get-Commandのタイプミス
Get-Commnd
Suggestion [4,General]: The most similar commands are: Get-Command, Get-Content, Get-Job, Get-Module, Get-Item, Set-Content, Get-Event, Get-Host.
Temp Drive
こちらも地味な改善なのですが、[System.IO.Path]::GetTempPath()
メソッドで取得できるパス(C:\Users\[User名]\AppData\Local\Temp\
、/tmp/
など)に対してドライブが割り当てられ、Temp:\
でアクセスできる様になります。
Abbreviation Expansion
こちらはコンソール上のタブ補完を強化する機能になります。
従来のPowerShellコンソールのタブ補完は前方一致で後方入力文字の補完のみでしたが、この機能を有効にするとコマンドレットの動詞の省略形も補完対象となり、
g-c[Tab入力]
の様な入力をした場合に
Get-Command
と補完してくれる様になります。
コード改善
こちらはアナウンスされなかったのですが、PowerShell Coreの開発にCodeFactorが導入され、コードスタイルの修正や内部処理のリファクタリングがPowerShell Core 6.2ではかなり行われています。
(私が日々GitHubの変更を追っての体感となりますが...)
これらの修正は機能に直結しないものの、コード基盤がより安定したものとなり、迅速に機能の変更に対応するために必要なものです。
これからのPowerShellでより迅速に新しい機能が提供されていることに期待したいです。
その他
PowerShell Core 6.2本体としてはこんな感じなのですが、アナウンスの中でしれっと以下のコメントを出しています。
Throughout the development of 6.2, the PowerShell Core team has also been focused on supporting PowerShell Core 6 in Azure Functions (more on this soon!), automating our release process (blog coming!), the v1.18.0 release of PSScriptAnalyzer, the 2.0.0-Preview release of the PowerShell Visual Studio Code extension, and, of course, the PowerShell Core 6.2 release.
ここで
Throughout the development of 6.2, the PowerShell Core team has also been focused on supporting PowerShell Core 6 in Azure Functions (more on this soon!)
とある様に現在Azure FunctionsでPowerShell Coreのサポートを追加しようと計画中であることが明らかにされました。
現在Azure FunctionsのPowerShellサポートはV1ランタイムでExperimentalリリースのみ、V2ランタイムはそもそもサポートされていません。
PowerShell Coreは.NET Core製ですのでV2ライタイムで提供されることはまず間違いないでしょう。
ちなみにAzure FunctionsでのPowerShell Coreサポート計画が明言されたのはこれが初となります。
また、
automating our release process (blog coming!)
についても詳細は不明ですが気になるところです。
最後に
ざっとこんな感じです。
大きな変更や新機能はないものの、パフォーマンスや細かい使い勝手が改善されており、実際体感としても使いやすくなっていると感じます。
皆さんもぜひPowerShell Core 6.2を試してみてください。